package inner;

class OuterClass{

    public int data1 = 10;
    private int data2 = 2;
    public static int data3=3;

    public void test(){
        //在方法里不能用static，用final也不行
        final int SIZE = 10;//常量 -- 只能初始化一次
        System.out.println("Outer class::test()");
        //外部类中访问内部类
        InnerClass innerclass = new InnerClass();
        innerclass.func();
        System.out.println(innerclass.data1);
    }

    /**
     * 实例内部类
     * 1.该如何获取 实力内部类的对象
     *      OuterClass.InnerClass innerclass = outerclass.new InnerClass();
     * 2.实例内部类不能有static -- 实例内部类相当于一个对象，在加载类的时候就被加载，但是内部类不引用的是有“不存在”，不能有static类
     *           但是public static final int data6 = 10;可以 --final常量 ，让data6变成一个常量值，在编译的时候就确定了
     * 3.在内部类中可以访问外部类的成员--那如何访问与外部类中相同的成员变量
     *    类名.this.data1 -- OuterClass.this.data1
     */

    class InnerClass{
        public int data4=4;
        int data5=5;
        public int data1 = 111;
        //public static int data6;error -- 不支持内部李static

        public void func(){
            System.out.println(OuterClass.this.data1);
            System.out.println(data1);
            System.out.println(data2);
            System.out.println(data3);
            System.out.println(data4);
            System.out.println(data5);
            System.out.println("Inner class::func()");
        }
    }
}
public class Test {
    public static void main(String[] args) {
        OuterClass outer = new OuterClass();
        //通过外部类拿到内部类的类型
        OuterClass.InnerClass inner = outer.new InnerClass();
        inner.func();
    }
}
